package com.gupao.rpc.protocol.serializer;

/**
 * 序列化接口
 *
 * @author SuperWein
 */
public interface IRpcSerializer {
    /**
     * 序列化
     *
     * @param obj 序列化对象
     * @param <T> 序列化之后的类型
     * @return 序列化之后的结果
     */
    public <T> byte[] serialize(T obj);

    /**
     * 反序列化
     *
     * @param bytes 二进制数据
     * @param clazz 反序列化出来的类类型
     * @param <T> 反序列化出来的类类型
     * @return 反序列化的结果
     */
    public <T> T deserialize(byte[] bytes, Class<T> clazz);

    /**
     * 序列化的类型
     *
     * @return 序列化类型
     */
    byte getType();

}
